package com.yh.controller;

import com.yh.javabean.User;
import jdk.internal.org.objectweb.asm.tree.analysis.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import java.util.Date;

/**
 * @Auther: Liang
 * @Date: 2024/5/18 - 05 - 18 - 18:44
 * @Description: com.yh.controller
 * @version: 1.0
 */
@Controller
//请求映射
public class RequestController {
    //1、通过request对象获取
    @RequestMapping("/d1.do")
    @ResponseBody
    public String data1(HttpServletRequest request){
        String username = request.getParameter("username");
        return username;
    }

    //2、获取常用类型参数
    //直接将要获取的数据声明在方法参数中 形参名与要获取的name相同
    //会自动进行注入 甚至内置的类型处理器还会帮我们进行简单的类型转换
    //包装类可以空值
    @RequestMapping("d2.do")
    @ResponseBody
    public String d2(String username,String password,Integer age){
        return username+","+password+","+age;
    }


    //3、获取形参名不匹配的数据
    //一般形参与name相同会自动注入 进行使用 如果不同
    //可以使用@RequestParam进行绑定值设置 以及额外操作
    //注意
    //1.当你使用该注解时 其required默认为true 代表必填
    //如果设置了必填 请求时必须拥有此name数据
    //2.如果设置了默认值 那么一定要将必填设置为false
   //默认值设置 defaultValue = "18"
    @RequestMapping("d3.do")
    @ResponseBody
    public String d3(@RequestParam(value = "username",required = false ,defaultValue = "123") String username, String password){
        return username+","+password;
    }

    //4.请求数组类型数据获取
    @RequestMapping("d4.do")
    @ResponseBody
    public String[] d4(String[] arr){
        return arr;
    }

    //5、请求自定义类型数据获取
    //自定义类型的属性可以自动存入
    //书写的属性名必须要和name一致
    @RequestMapping("d5.do")
    @ResponseBody
    public User d5(Integer id,String name,Integer age){
        User user = new User(id,name,age,null);
        return user;
    }
    //进阶版：直接使用对应的自定义类型作为参数 会自动实例化并注入属性
    @RequestMapping("d6.do")
    @ResponseBody
    public User d6(User u){
        return u;
    }
    //其它的属性还可以直接定义获取，而且可以重复获取
    @RequestMapping("/d7.do")
    @ResponseBody
    public User d7(User u,String uname,Integer id){
        System.out.println(u+","+uname+","+id);
        return u;
    }

    //6、异步请求提交json数据进行获取
    @RequestMapping("/d8.do")
    @ResponseBody
    public User data8(@RequestBody User u){
        System.out.println(u);
        return u;
    }


    //7、获取请求中日期类型数据
    //默认数据传输是字符串类型 (日期类型)
    @RequestMapping("/data1")
    @ResponseBody
    public String d9(String time){
        return time;
    }

    @RequestMapping("/data2")
    @ResponseBody
    public Date date2(Date time){
        System.out.println(time);
        return time;
    }

    @RequestMapping("/date3")
    @ResponseBody
    public User date3(User u){
        System.out.println(u);
        return u;
    }
}
